#pragma once
#include <iostream>
#include "basicsCommand.hpp"
#include "fileTree.h"
#include "IOControlLayer.h"

class FileSystem;

class Mkdir : public BasicsCommand, public Singleton<Mkdir> {
    friend class Singleton<Mkdir>;
public:
    std::string executeCommand(std::istringstream& iss) override;
    void initCommandMap() override{ }

protected:
    Mkdir(){}
    ~Mkdir(){}
};

class Ls: public BasicsCommand, public Singleton<Ls> {
    friend class Singleton<Ls>;
public:
    std::string executeCommand(std::istringstream& iss) override;
    void initCommandMap() override{ }

protected:
    Ls(){}
    ~Ls(){}
};

class Cd: public BasicsCommand, public Singleton<Cd> {
    friend class Singleton<Cd>;
public:
    std::string executeCommand(std::istringstream& iss) override ;
    void initCommandMap() override{ }

protected:
    Cd(){}
    ~Cd(){}
};

class Touch: public BasicsCommand, public Singleton<Touch> {
    friend class Singleton<Touch>;
public:
    std::string executeCommand(std::istringstream& iss) override ;
    void initCommandMap() override{ }

protected:
    Touch(){}
    ~Touch(){}
};

class Cat: public BasicsCommand, public Singleton<Cat> {
    friend class Singleton<Cat>;
public:
    std::string executeCommand(std::istringstream& iss) override ;
    void initCommandMap() override{ }

protected:
    Cat(){}
    ~Cat(){}
};
